package com.project.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.project.bean.GradeBean;
import com.project.bean.RoleBean;
import com.project.service.IRoleService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * 角色控制器
 */
@RestController
@RequestMapping("role")
@RequiresPermissions("role:am")
public class RoleController {
    @Autowired
    private IRoleService roleService;
     @RequestMapping("findAllRole")
    public List<RoleBean> findAllRole(){
         return roleService.findAllRole();
     }

    /**
     * 通过角色id数组查询角色权限集合，去除重复权限
     * @param roleId 角色id数组
     * @return 权限集合
     */
    @RequestMapping("findGradeByRoleId")
    public List<GradeBean> findGradeByRoleId(Integer[] roleId){
        return roleService.findGradeByRoleId(roleId);
    }

    /**
     * 分页查询角色集合
     * @param pageNO 页码
     * @return 分页对象
     */

    @RequestMapping("cutByItem")
    public IPage<RoleBean> cutByItem(Integer pageNO){
        return roleService.cutByItem(pageNO);
    }

    /**
     * 通过角色id删除角色
     * 1、通过角色id删除用户角色中间表
     *2、通过角色id删除权限角色中间表
     * 3、通过角色id删除角色
     * @param roleId 角色ID
     */
    @RequestMapping("delRoleById")
    public String delRoleById(Integer roleId){
        roleService.delRoleById(roleId);
        return "ok";
    }

    /**
     * 按角色ID，查询角色信息，同时查询角色拥有的权限集合
     * @param roleId 角色ID
     * @return 角色对象
     */
    @RequestMapping("findById")
    public RoleBean findById(Integer roleId){
        return roleService.findById(roleId);
    }

    /**
     * 添加角色
     * 添加角色，同时添加角色拥有的权限集合
     * @param role 角色对象
     * @param gradeId 权限id数组
     */

    @RequestMapping("addRole")
    public String addRole(RoleBean role,Integer[] gradeId){
        roleService.addRole(role,gradeId);
        return "ok";
    }

    /**
     * 通过角色id修改用户的权限
     * 先通过角色id删除中间表相关信息，再添加新的权限信息
     * @param roleId 角色ID
     * @param newGradeId 用户新权限id数组
     */
    @RequestMapping("updateGradeByRoleId")
    public String updateGradeByRoleId(Integer roleId,Integer[] newGradeId){
        roleService.updateGradeByRoleId(roleId, newGradeId);
        return "ok";
    }
    @RequestMapping("findByName")
    public RoleBean findByName(String roleName){
       return roleService.findByName(roleName);
    }
}
